#if !defined(MGACTION_H_INCLUDED)
#define MGACTION_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "MGConstant.h"

template<class TImpl = CMGActionImpl>
class CMGAction : public TImpl
{
public:
	inline void Cleanup() { TImpl::Cleanup(); }

public:
	inline BOOL NoCommand(HWND hWnd, BOOL bRightButton, const POINT &ptTarget, BYTE bCatTarget = 0) { return TImpl::NoCommand(hWnd, bRightButton, ptTarget, bCatTarget); }
	inline BOOL ExecuteCommand(HWND hWnd, WORD wID, LPCTSTR pszID, const POINT &ptTarget, BYTE bCatID = 0, BYTE bCatTarget = 0) { return TImpl::ExecuteCommand(hWnd, wID, pszID, ptTarget, bCatID, bCatTarget); }
	inline BOOL ExecuteDblClk(HWND hWnd, enum MG::DoubleClickOption option, const POINT &ptTarget, BYTE bCatTarget = 0) { return TImpl::ExecuteDblClk(hWnd, option, ptTarget, bCatTarget); }
	inline void UpdateStatusBar(LPCTSTR pszMessage) { TImpl::UpdateStatusBar(pszMessage); }
	inline void UpdateStatusBarWheelCommand(LPCTSTR pszCommand, BOOL bUp) { TImpl::UpdateStatusBarWheelCommand(pszCommand, bUp); }
	inline void Notify(enum MG::NotifyOption notification) { TImpl::Notify(notification); }
	inline void IdentifyTargetWindowClass(HWND hWnd) { TImpl::IdentifyTargetWindowClass(hWnd); }
	inline int CheckTargetValid(HWND hWnd) { return TImpl::CheckTargetValid(hWnd); }
	inline BOOL IsMGInAction() { return TImpl::IsMGInAction(); }

public:
	inline void UpdateRegistry(BOOL bSaveAndValidate = TRUE) { TImpl::UpdateRegistry(bSaveAndValidate); }
};

#endif // !defined(MGACTION_H_INCLUDED)
